অ্যাডভান্সড সকেট প্রোগ্রামিং হল সকেট-ভিত্তিক যোগাযোগের আরও জটিল দিকগুলি, যা সাধারণ সকেট তৈরি এবং সংযোগ স্থাপনের মৌলিক ধারণার বাইরে চলে। এটি সাধারণত আরও উন্নত ব্যবহার কেসগুলি মোকাবিলা করে, যেমন একাধিক ক্লায়েন্টের সাথে সমান্তরাল কাজ, ত্রুটি পরিচালনা, নিরাপদ যোগাযোগ এবং কার্যকারিতা অপটিমাইজেশন।
নন-ব্লকিং সকেট ব্যবহার করার মাধ্যমে প্রোগ্রামটি অন্যান্য কাজ করতে পারে, যখন এটি কোনো সংযোগ বা ডেটা গ্রহণের জন্য অপেক্ষা করছে, পরিবর্তে পুরো প্রক্রিয়াটি ব্লক হওয়ার পরিবর্তে। এটি উচ্চ-কার্যকারিতা সিস্টেমে ব্যবহার করা হয় যেখানে লেটেন্সি এবং সমান্তরালতা গুরুত্বপূর্ণ।
recv()
বা send()
প্রোগ্রামটি ব্লক না করে, তারা যদি ডেটা প্রস্তুত না থাকে তবে would block
ত্রুটি প্রদান করে। এর মাধ্যমে একাধিক সকেটের জন্য একযোগে কাজ করা যায়, যেমন select()
বা poll()
এর মাধ্যমে।select()
এবং poll()
হল সিস্টেম কল যা একাধিক সকেট (বা ফাইল ডিসক্রিপ্টর) পর্যবেক্ষণ করে, যাতে কোন ইভেন্ট (যেমন পড়া, লেখা, বা এক্সেপশন) ঘটলে তা জানানো হয়, এবং এটি ব্লক না করে।
select()
: এটি একাধিক সকেট পর্যবেক্ষণ করে এবং যখন একটি বা একাধিক সকেট পড়া, লেখা বা কোনো ত্রুটির জন্য প্রস্তুত থাকে, তখন প্রোগ্রামকে জানায়।poll()
: এটি select()
এর মতো, তবে এটি আরও বেশি ফাইল ডিসক্রিপ্টর এবং বেশি নমনীয়তার সাথে কাজ করতে পারে।এই দুটি ফাংশন একটি সিঙ্গেল থ্রেড বা মাল্টি-থ্রেডেড সার্ভারে একাধিক ক্লায়েন্টের সংযোগ পরিচালনা করার জন্য ব্যবহৃত হয়।
থ্রেডেড সকেট প্রোগ্রামিংয়ের মাধ্যমে একটি সার্ভার একাধিক ক্লায়েন্টের সংযোগ সমান্তরালভাবে পরিচালনা করতে পারে, এবং প্রতিটি সংযোগের জন্য একটি নতুন থ্রেড তৈরি করে। এটি C তে pthreads (POSIX থ্রেডস) বা Java, Python এর মাল্টি-থ্রেডিং ব্যবহার করে করা যায়।
অ্যাসিঙ্ক্রোনাস সকেট প্রোগ্রামিংয়ে প্রোগ্রামটি সকেট অপারেশনগুলো ব্যাকগ্রাউন্ডে পরিচালনা করতে পারে, যাতে মেইন থ্রেড ব্লক না হয়। এর জন্য কলব্যাক ফাংশন ব্যবহার করা হয়, যা অপারেশনটি সম্পন্ন হলে এক্সিকিউট হয়।
libuv
, Boost.Asio
(C++), asyncio
(Python), Node.js
অ্যাসিঙ্ক্রোনাস সকেট ইমপ্লিমেন্টেশনের জন্য জনপ্রিয় টুলস।নিরাপত্তা আধুনিক নেটওয়ার্ক প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ দিক। SSL/TLS প্রোটোকল ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা এনক্রিপ্ট করা হয়, যাতে তৃতীয় পক্ষ ডেটা শোনার বা পরিবর্তন করার ক্ষমতা না পায়।
ssl
, Java-এ javax.net.ssl
)।SSL_connect()
বা সমতুল্য ফাংশন ব্যবহার করে সকেটটি র্যাপ করে।মাল্টিকাস্টের মাধ্যমে একসাথে একাধিক ক্লায়েন্টে ডেটা প্রেরণ করা হয়। এটি বিশেষভাবে স্ট্রিমিং, কনফারেন্সিং এবং বড় আকারের ডেটা বিতরণের জন্য ব্যবহারযোগ্য।
SOCK_DGRAM
টাইপ ব্যবহার করে এবং IP_ADD_MEMBERSHIP
সকেট অপশন ব্যবহার করা হয়। সার্ভার একটি মাল্টিকাস্ট ঠিকানায় বার্তা পাঠাতে পারে, এবং একাধিক ক্লায়েন্ট তা গ্রহণ করতে পারে।উচ্চ-কার্যকারিতা সিস্টেমে সকেট বাফারগুলো অপটিমাইজ করা জরুরি, যাতে কোন বটলনেক সৃষ্টি না হয়। পাঠানো এবং গ্রহণ করার বাফার সাইজ (SO_RCVBUF
, SO_SNDBUF
) পরিবর্তন করা যেতে পারে throughput উন্নত করতে।
ব্রডকাস্টিং হল একক প্রেরক থেকে পুরো নেটওয়ার্কে ডেটা পাঠানো, যা স্থানীয় নেটওয়ার্কে ডিভাইসগুলি খুঁজে বের করার মতো পরিস্থিতিতে উপকারী।
SOCK_DGRAM
সকেট ব্যবহার করে এবং ব্রডকাস্ট ঠিকানা 255.255.255.255
ব্যবহার করা হয়।রড সকেট প্রোগ্রামগুলি নেটওয়ার্ক স্ট্যাকের নিম্নস্তরের সাথে সরাসরি কাজ করতে দেয়, যা ICMP (যেমন ping
) এবং কাস্টম প্রোটোকল তৈরি করার জন্য ব্যবহৃত হয়।
সকেটগুলি একই মেশিনে চলমান প্রক্রিয়াগুলির মধ্যে ইন্টার-প্রসেস কমিউনিকেশন (IPC) এর জন্য ব্যবহার করা যেতে পারে, যা প্রোগ্রামগুলির মধ্যে ডেটা শেয়ার করতে এবং সিঙ্ক্রোনাইজ করতে সহায়তা করে।
অ্যাডভান্সড সকেট প্রোগ্রামিং বিভিন্ন টেকনিক এবং অপটিমাইজেশন নিয়ে কাজ করে, যা সকেট যোগাযোগকে আরও কার্যকরী, নিরাপদ এবং স্কেলেবল করে। নন-ব্লকিং I/O, থ্রেডিং, অ্যাসিঙ্ক্রোনাস মডেল, SSL/TLS সুরক্ষা, এবং রিসোর্স ম্যানেজমেন্ট ব্যবহার করে উন্নত পারফরম্যান্স এবং দৃঢ় নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করা সম্ভব।
রড সকেটস হল একটি ধরনের সকেট যা নেটওয়ার্ক প্রোটোকলের নিম্নস্তরের সাথে সরাসরি যোগাযোগ করতে সক্ষম। এই ধরনের সকেটের মাধ্যমে প্রোগ্রামগুলি প্রোটোকলের হেডার এবং পে-লোডসহ পুরো প্যাকেটটি নিজে তৈরি ও পাঠাতে পারে। রড সকেটস সাধারণত ICMP (Internet Control Message Protocol) প্রোটোকল বা অন্যান্য কাস্টম প্রোটোকল তৈরি করার জন্য ব্যবহৃত হয়।
রড সকেট একটি SOCK_RAW
টাইপের সকেট, যা নিম্ন স্তরের নেটওয়ার্ক স্তরের প্যাকেটের পাঠানো এবং গ্রহণের জন্য ব্যবহার হয়। এই প্রকার সকেট ব্যবহার করে প্রোগ্রামটি সম্পূর্ণ প্যাকেট নিয়ন্ত্রণ করতে পারে, যার মধ্যে রয়েছে প্রোটোকল হেডার যেমন IP হেডার, TCP হেডার, UDP হেডার ইত্যাদি।
উদাহরণ: যদি আপনি একটি রড সকেট ব্যবহার করেন, তাহলে আপনি ICMP (যেমন পিং) বা UDP প্রোটোকল সম্পর্কে খোঁজ পেতে পারেন এবং এই প্রোটোকলগুলির পুরো প্যাকেটটি নিজে তৈরি করতে পারবেন, যা স্বাভাবিক TCP/UDP সকেট ব্যবহারকারী করতে পারেন না।
ping
বা traceroute
রড সকেট ব্যবহার করে ICMP প্যাকেট পাঠায় এবং নেটওয়ার্কের স্থিতি যাচাই করে। এর মাধ্যমে আপনি রাউটিং সমস্যাগুলি বা প্যাকেট ড্রপ সনাক্ত করতে পারেন।এখানে একটি সাধারণ উদাহরণ দেওয়া হল যা একটি রড সকেট তৈরি করে এবং ICMP (পিং) প্যাকেট পাঠানোর জন্য ব্যবহৃত হতে পারে (যেমন, Python এর মাধ্যমে):
import socket
import os
import time
# ICMP পিং প্যাকেট তৈরির জন্য সকার তৈরি
icmp = socket.getprotobyname("icmp")
raw_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
# গন্তব্য IP ঠিকানা
destination = "8.8.8.8"
# প্যাকেট তৈরি এবং পাঠানো
def ping(destination):
raw_socket.sendto(b"ICMP Echo Request", (destination, 0))
print(f"Sent ICMP packet to {destination}")
ping(destination)
এটি একটি সাধারণ ICMP প্যাকেট তৈরি করে এবং পাঠায়, কিন্তু বাস্তবে আরও জটিল হেডার এবং প্যাকেট গঠন প্রয়োজন হয়।
রড সকেটস নেটওয়ার্ক প্রোগ্রামিংয়ের এক গুরুত্বপূর্ণ দিক, যা ডেভেলপারদের নেটওয়ার্ক প্যাকেটগুলির উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়। এটি সিকিউরিটি টুলস, ডায়াগনস্টিকস, কাস্টম প্রোটোকল ইমপ্লিমেন্টেশন এবং নেটওয়ার্ক মনিটরিংয়ের জন্য অপরিহার্য। তবে, এর ব্যবহারের সময় সতর্কতা অবলম্বন করা জরুরি, কারণ এটি সিকিউরিটি ঝুঁকি তৈরি করতে পারে।
নেটওয়ার্ক কমিউনিকেশন সঠিকভাবে কাজ করার জন্য বিভিন্ন প্রোটোকল ব্যবহৃত হয়। ICMP, IGMP, এবং ARP হল এমন কিছু প্রোটোকল যা নেটওয়ার্কে ডেটা আদান-প্রদান, ডিভাইসের অবস্থান জানানো এবং নেটওয়ার্কের পরিস্থিতি সম্পর্কে তথ্য প্রদান করতে ব্যবহৃত হয়। এখানে আমরা এই তিনটি প্রোটোকলের কাজ এবং তাদের ব্যবহার নিয়ে আলোচনা করব।
ICMP প্রোটোকলটি নেটওয়ার্ক ডিভাইসগুলির মধ্যে তথ্য বিনিময়ের জন্য ব্যবহৃত হয়, বিশেষ করে নেটওয়ার্কে সমস্যা সনাক্তকরণ এবং ডিভাইসের অবস্থান জানাতে। এটি IP প্রোটোকলের সাথে কাজ করে এবং সাধারণত নেটওয়ার্ক ডায়াগনস্টিকস যেমন ping
এবং traceroute
এর জন্য ব্যবহৃত হয়।
Destination Unreachable
বার্তা পাঠায়।import socket
import os
import time
def ping(destination):
icmp = socket.getprotobyname("icmp")
raw_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
raw_socket.sendto(b"ICMP Echo Request", (destination, 0))
print(f"Sent ICMP packet to {destination}")
ping("8.8.8.8") # Google DNS IP
IGMP একটি প্রোটোকল যা IPv4 নেটওয়ার্কে মাল্টিকাস্ট গ্রুপের সদস্যদের পরিচালনা করার জন্য ব্যবহৃত হয়। মাল্টিকাস্ট গ্রুপের সদস্যরা একে অপরের সাথে একযোগে ডেটা শেয়ার করতে পারে। IGMP প্রোটোকল মূলত রাউটার এবং হোস্টদের মধ্যে মাল্টিকাস্ট সদস্যপদ সম্পর্কিত তথ্য বিনিময়ের জন্য ব্যবহৃত হয়।
IGMP সাধারণত সিস্টেমে কাজ করার জন্য উপযুক্ত সফটওয়্যার বা ডিভাইসের মাধ্যমে নিয়ন্ত্রিত হয়, যেমন ভিডিও কনফারেন্সিং অ্যাপ্লিকেশন, মাল্টিকাস্ট স্ট্রিমিং সার্ভিস, ইত্যাদি।
ARP হল একটি নেটওয়ার্ক প্রোটোকল যা আইপি ঠিকানা (IPv4) থেকে ম্যাক (MAC) ঠিকানা অনুবাদ করে। যখন একটি ডিভাইস একটি আইপি ঠিকানা জানে কিন্তু সেই আইপি ঠিকানার সাথে যুক্ত ম্যাক ঠিকানা জানে না, তখন এটি ARP প্রোটোকল ব্যবহার করে নেটওয়ার্কে ম্যাক ঠিকানা সন্ধান করে।
ARP প্রোটোকলের সাথে সরাসরি কাজ করতে কিছু নেটওয়ার্ক টুলস ব্যবহার করা হয় যেমন arp
কমান্ড লাইন টুল। এটি আইপি এবং ম্যাক ঠিকানা সম্পর্কিত তথ্য প্রদান করে।
arp -a # সিস্টেমে ক্যাশ করা ARP তথ্য দেখতে
ICMP, IGMP, এবং ARP প্রোটোকলগুলি নেটওয়ার্কে যোগাযোগ এবং ডেটা পরিবহন নিশ্চিত করতে অপরিহার্য।
এই প্রোটোকলগুলির প্রতিটির নিজস্ব ভূমিকা রয়েছে নেটওয়ার্কের স্থিতিশীলতা, সিকিউরিটি এবং কার্যকারিতা নিশ্চিত করতে।
নেটওয়ার্ক স্নিফিং এবং অ্যানালিসিস হল নেটওয়ার্কের মধ্যে চলমান প্যাকেট এবং ডেটা ট্রাফিকের বিশ্লেষণ। এটি নেটওয়ার্ক সমস্যা সনাক্তকরণ, নিরাপত্তা সমস্যা চিহ্নিত করা, এবং নেটওয়ার্কের কার্যকারিতা বিশ্লেষণ করার জন্য ব্যবহৃত হয়। প্যাকেট স্নিফিং বিভিন্ন ধরনের টুলস এবং প্রোটোকল বিশ্লেষণ করতে সাহায্য করে, যা নেটওয়ার্ক অ্যাডমিনিস্ট্রেটর এবং নিরাপত্তা বিশেষজ্ঞদের জন্য গুরুত্বপূর্ণ।
প্যাকেট স্নিফিং হল এমন একটি প্রক্রিয়া, যেখানে নেটওয়ার্কের মধ্যে আদান-প্রদান হওয়া সমস্ত ডেটা প্যাকেট সংগ্রহ এবং বিশ্লেষণ করা হয়। এটি সাধারণত নেটওয়ার্ক ট্রাফিক মনিটরিং এবং সমস্যা চিহ্নিত করার জন্য ব্যবহৃত হয়।
প্যাকেট স্নিফার একটি সফটওয়্যার বা হার্ডওয়্যার টুল যা নেটওয়ার্কে চলমান ডেটা প্যাকেটগুলিকে ধরা এবং বিশ্লেষণ করতে সাহায্য করে। এটি নিম্নলিখিত কাজ করতে পারে:
নেটওয়ার্ক অ্যানালিসিস হল নেটওয়ার্কের কার্যকারিতা, স্থিতিশীলতা এবং নিরাপত্তা বিশ্লেষণের প্রক্রিয়া। এটি বিভিন্ন প্যাকেট স্নিফিং টুলস ব্যবহার করে সম্পন্ন হয় এবং নেটওয়ার্কের মধ্যে প্রেরিত এবং গ্রহণ করা প্যাকেটগুলির বিশ্লেষণ করতে সাহায্য করে।
প্যাকেট স্নিফিং এবং নেটওয়ার্ক অ্যানালিসিস এর মাধ্যমে আপনি নেটওয়ার্কের ট্রাফিক বিশ্লেষণ করে দেখতে পারেন কোথায় ব্যান্ডউইথ সমস্যাগুলি ঘটছে। উদাহরণস্বরূপ, কোন সার্ভার বা পোর্টে বেশি ট্রাফিক আসছে কিনা এবং কোন প্রোটোকল বেশি ব্যান্ডউইথ খাচ্ছে তা বিশ্লেষণ করা।
নেটওয়ার্ক স্নিফিং ব্যবহার করে নিরাপত্তা ত্রুটির সন্ধান করা যায়, যেমন:
প্যাকেট স্নিফিং ব্যবহার করে আপনি নেটওয়ার্কে সমস্যা চিহ্নিত করতে পারেন, যেমন:
প্যাকেট স্নিফিং এবং নেটওয়ার্ক অ্যানালিসিস অত্যন্ত গুরুত্বপূর্ণ টুল নেটওয়ার্ক অ্যাডমিনিস্ট্রেটরদের জন্য, যা তাদের নেটওয়ার্কের কার্যকারিতা এবং নিরাপত্তা নিশ্চিত করতে সাহায্য করে। তবে এগুলির ব্যবহার করার সময় সতর্কতা অবলম্বন করা জরুরি, বিশেষত আইনি ও প্রাইভেসি সমস্যা সম্পর্কে সচেতন থাকা।
অ্যাডভান্সড সকেট প্রোগ্রামিং হল নেটওয়ার্ক প্রোগ্রামিংয়ের একটি উন্নত দিক, যেখানে সিস্টেমের কার্যকারিতা, স্কেলেবিলিটি এবং সিকিউরিটি নিশ্চিত করতে আরও জটিল এবং উন্নত কৌশল ব্যবহার করা হয়। এটি বিশেষভাবে ইন্টার-প্রসেস কমিউনিকেশন, একাধিক ক্লায়েন্ট সমর্থন, থ্রেডিং, নন-ব্লকিং I/O এবং সিকিউরড যোগাযোগের জন্য ব্যবহৃত হয়।
এখানে কিছু অ্যাডভান্সড সকেট প্রোগ্রামিংয়ের উদাহরণ এবং প্রয়োগ নিয়ে আলোচনা করা হবে।
নন-ব্লকিং সকেট ব্যবহার করে একটি সকেটকে এমনভাবে কনফিগার করা যায় যে এটি কোনো ডেটা পাঠানোর জন্য অপেক্ষা করবে না, বরং অবিলম্বে কাজ করতে যাবে। এটি সাধারণত একাধিক ক্লায়েন্টের সাথে একই সময়ে যোগাযোগ করার জন্য ব্যবহৃত হয়।
import socket
import select
# সার্ভার সেটআপ
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setblocking(False) # নন-ব্লকিং সকেট
server_socket.bind(('127.0.0.1', 65432))
server_socket.listen(5)
# সিলেক্ট ফাংশন ব্যবহার করে নেটওয়ার্ক আই/ও অপারেশন
inputs = [server_socket]
while True:
readable, _, _ = select.select(inputs, [], [])
for s in readable:
if s is server_socket:
client_socket, client_address = s.accept()
print(f"Client connected: {client_address}")
client_socket.setblocking(False)
inputs.append(client_socket)
else:
data = s.recv(1024)
if data:
print(f"Received data: {data.decode()}")
else:
print(f"Client disconnected")
inputs.remove(s)
s.close()
এখানে, সার্ভার নন-ব্লকিং মোডে থাকে, তাই এটি একটি ক্লায়েন্টের সাথে সংযোগ করার জন্য ব্লক হবে না। select.select()
ব্যবহার করে সার্ভার একাধিক ক্লায়েন্ট থেকে আসা ডেটা একযোগে গ্রহণ করতে পারে।
একটি থ্রেডেড সার্ভার একাধিক ক্লায়েন্টের সাথে একযোগে যোগাযোগ করতে সক্ষম, যেখানে প্রতিটি ক্লায়েন্টের জন্য আলাদা থ্রেড তৈরি করা হয়। এটি কার্যকারিতা বাড়ানোর জন্য ব্যবহৃত হয়, বিশেষত যখন অনেক ক্লায়েন্ট একসাথে সার্ভারে সংযোগ করে।
import socket
import threading
def handle_client(client_socket):
with client_socket:
print("Client connected")
while True:
data = client_socket.recv(1024)
if not data:
break
print(f"Received data: {data.decode()}")
client_socket.sendall(data)
print("Client disconnected")
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 65432))
server_socket.listen(5)
print("Server listening on port 65432")
while True:
client_socket, client_address = server_socket.accept()
print(f"Connection from {client_address}")
client_thread = threading.Thread(target=handle_client, args=(client_socket,))
client_thread.start()
এখানে, প্রতি ক্লায়েন্টের জন্য একটি নতুন থ্রেড তৈরি করা হয়, যা ক্লায়েন্টের সাথে আলাদা করে যোগাযোগ স্থাপন করে।
আসিঙ্ক্রোনাস সকেট প্রোগ্রামিং একটি শক্তিশালী পদ্ধতি যা নেটওয়ার্ক অপারেশনগুলিকে ব্যাকগ্রাউন্ডে সম্পন্ন করতে সাহায্য করে। এর ফলে মূল থ্রেড ব্লক না হয়ে অন্যান্য কাজ করতে পারে।
import asyncio
async def handle_client(reader, writer):
data = await reader.read(100)
message = data.decode()
addr = writer.get_extra_info('peername')
print(f"Received {message} from {addr}")
response = f"Hello, {message}"
writer.write(response.encode())
await writer.drain()
print("Closing the connection")
writer.close()
async def main():
server = await asyncio.start_server(
handle_client, '127.0.0.1', 65432)
addr = server.sockets[0].getsockname()
print(f"Serving on {addr}")
async with server:
await server.serve_forever()
asyncio.run(main())
এখানে, asyncio
লাইব্রেরি ব্যবহার করা হয়েছে যাতে মূল থ্রেড ব্লক না হয়। যখন একটি ক্লায়েন্ট সংযোগ করে, তখন handle_client()
আসিঙ্ক্রোনাসভাবে কাজ করে এবং সার্ভারটি অন্যান্য ক্লায়েন্টদের জন্য উন্মুক্ত থাকে।
এটি নিরাপত্তা নিশ্চিত করার জন্য ব্যবহৃত হয়, যেখানে সার্ভার এবং ক্লায়েন্টের মধ্যে আদান-প্রদান করা ডেটা এনক্রিপ্ট করা থাকে। SSL/TLS প্রোটোকলগুলি সুরক্ষিত সংযোগ প্রতিষ্ঠা করতে সাহায্য করে।
import socket
import ssl
# সার্ভার সেটআপ
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 65432))
server_socket.listen(5)
# SSL সুরক্ষিত সকেট তৈরি করা
ssl_socket = ssl.wrap_socket(server_socket, keyfile="server.key", certfile="server.crt", server_side=True)
print("Server listening on port 65432")
while True:
client_socket, client_address = ssl_socket.accept()
print(f"Connection from {client_address}")
data = client_socket.recv(1024)
print(f"Received: {data.decode()}")
client_socket.sendall(b"Hello, secure world!")
client_socket.close()
এখানে, ssl.wrap_socket()
ব্যবহার করা হয়েছে যাতে সার্ভারের সকেট SSL/TLS এনক্রিপশনে রূপান্তরিত হয়, এবং ক্লায়েন্টের সাথে নিরাপদভাবে ডেটা আদান-প্রদান করা যায়।
মাল্টিকাস্ট সকেট একযোগে একাধিক ক্লায়েন্টের কাছে ডেটা পাঠানোর জন্য ব্যবহৃত হয়। এটি বিশেষভাবে স্ট্রিমিং সার্ভিস বা ডেটা বিতরণের জন্য উপকারী।
import socket
import struct
multicast_group = ('224.1.1.1', 10000)
# সকেট সেটআপ
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# মাল্টিকাস্ট সকেট কনফিগার করা
server_socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255)
# বার্তা পাঠানো
message = b"This is a multicast message!"
server_socket.sendto(message, multicast_group)
এখানে, একটি মাল্টিকাস্ট গন্তব্য (224.1.1.1) সেট করা হয়েছে এবং সেই ঠিকানায় বার্তা পাঠানো হচ্ছে।
অ্যাডভান্সড সকেট প্রোগ্রামিংয়ের মাধ্যমে, উন্নত প্রযুক্তি যেমন নন-ব্লকিং I/O, থ্রেডিং, আসিঙ্ক্রোনাস I/O, SSL/TLS এনক্রিপশন, এবং মাল্টিকাস্ট সোসকেটের ব্যবহার সম্ভব। এই প্রোগ্রামিং কৌশলগুলি একাধিক ক্লায়েন্ট, নিরাপদ সংযোগ, এবং উচ্চ কার্যকারিতার জন্য প্রয়োজনীয়।
common.read_more